package model;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Observable;
import java.util.Vector;

public class Notifica extends Observable{

	static int lastNotIdDb=0;
	private int not_id;
	private String corpo ="";
	private int flag = 1;
	private int tipo=0;
	private int acc_id=0;

	public Notifica(){
		this.not_id = Notifica.lastNotIdDb;
		Notifica.lastNotIdDb++;
	}

	public Notifica(int not_id,String corpo,int flag,int tipo, int acc_id){
		setNot_id(not_id);
		setCorpo(corpo);
		setFlag(flag);
		setTipo(tipo);
		setAcc_id(acc_id);
		if (this.not_id>Notifica.lastNotIdDb)
			Notifica.lastNotIdDb = this.not_id;
	}

	public Notifica(int tipo,String acc_id,String data){
		this.tipo = tipo;
		switch (tipo){
		case 0: this.corpo = "Sei stato invitato all' evento '"+ Database.Evento.getNome().toUpperCase() +"' di "+Database.Utente.getFirstname().toUpperCase() + " "+ Database.Utente.getSecondname().toUpperCase()+ "."+ \u000A"L'evento si svolgerà in data: "+ data; break;
		case 1: this.corpo = "Non sei più invitato all' evento '"+ Database.Evento.getNome().toUpperCase() +"' di "+Database.Utente.getFirstname().toUpperCase() +" "+ Database.Utente.getSecondname().toUpperCase();break;
		case 2: this.corpo = Database.Utente.getFirstname().toUpperCase() +" "+ Database.Utente.getSecondname().toUpperCase() +" ha modificato l'evento del "+ data + "." + \u000A"L'evento è stato aggiornato nel tuo calendario"; break;
		case 3: this.corpo = Database.Utente.getFirstname().toUpperCase() +" "+ Database.Utente.getSecondname().toUpperCase() +" ha annullato  l'evento  '"+ Database.Evento.getNome().toUpperCase() +"'." + \u000A"L'evento è stato rimosso dal tuo calendario"; break;
		//case 4: this.corpo = "L'utente "+Database.Utente.getFirstname().toUpperCase() +" "+ Database.Utente.getSecondname().toUpperCase() +" si è rimosso da LoAD, pertanto verrà cancellato dalla tua rubrica."; break;
		//case 5: this.corpo = "Hai ricevuto un Alert di comportamento non corretto! La prossima volta rispetta le regole!"; break;
		}
		insertNotificaOnDb(Integer.valueOf(acc_id));
	}

	public Notifica(String corpo,String acc_id){ //notifica admin
		this.tipo=4;
		this.corpo = corpo;
		insertNotificaOnDb(Integer.valueOf(acc_id));
	}

	public int get_LastNotIDFromDB() {
		ResultSet result = Database.getQueryResult("SELECT not_id FROM notifica");
		int id=0;
		try {
			while(result.next())
				id=result.getInt("not_id");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		Notifica.lastNotIdDb = id+1;
		return id+1;
	}

	public int getNot_id() {
		return not_id;
	}

	public void setNot_id(int not_id) {
		this.not_id = not_id;
	}

	public String getCorpo() {
		return corpo;
	}

	public void setCorpo(String corpo) {
		this.corpo = corpo;
	}

	public int getFlag() {
		return flag;
	}

	public void setFlag(int flag) {
		this.flag = flag;
	}

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	public static void updateNotificaOnDb(Vector<Integer> unread){
		for (int i=0;i<unread.size();i++){
			String Query = "UPDATE notifica SET flag = 0 WHERE not_id = "+unread.get(i);
			Database.updateResource(Query);
		}
	}

	public void insertNotificaOnDb(int acc_id){
		int id = this.get_LastNotIDFromDB();
		String Query ="INSERT INTO notifica (not_id,corpo,flag,tipo,acc_id) " +
				"VALUES ("+id+",\"" +this.corpo +
				"\"," + 1 +
				"," + this.tipo +
				"," + acc_id +
				")";
		Database.setResource(Query);
	}

	public void uppdater() {
		setChanged();
		notifyObservers();
	}

	public int getAcc_id() {
		return acc_id;
	}

	public void setAcc_id(int acc_id) {
		this.acc_id = acc_id;
	}
}
